import { updateProduct, updateProtocolStandby } from '@/api/iot/product'

const product = {
  state: {
    // 产品数据（查看时临时数据）
    productData: {},
    // 详情页显示状态
    detailedPageVisible: false,
    // 属性添加修改组件
    propertiesAddEdit: undefined,
    // 功能添加修改组件
    functionsAddEdit: undefined,
    // 事件添加修改组件
    eventsAddEdit: undefined,
    // 标签添加修改组件
    tagsAddEdit: undefined,
    // 协议支持组件
    protocolStandby: undefined,
  },

  mutations: {
    // 产品数据（添加和修改）
    PRODUCT_DATA: (state, data) => {
      state.productData = { ...state.productData, ...data }
    },
    // 详情页显示状态
    PRODUCT_DETAILED_PAGE_VISIBLE: (state, data) => {
      state.detailedPageVisible = data
    },
    // 属性添加修改组件
    PRODUCT_PROPERTIES_ADD_EDIT: (state, data) => {
      state.propertiesAddEdit = data
    },
    // 功能添加修改组件
    PRODUCT_FUNCTIONS_ADD_EDIT: (state, data) => {
      state.functionsAddEdit = data
    },
    // 事件添加修改组件
    PRODUCT_EVENTS_ADD_EDIT: (state, data) => {
      state.eventsAddEdit = data
    },
    // 标签添加修改组件
    PRODUCT_TAGS_ADD_EDIT: (state, data) => {
      state.tagsAddEdit = data
    },
    // 协议支持组件
    PRODUCT_PROTOCOL_STANDBY: (state, data) => {
      state.protocolStandby = data
    },

  },

  actions: {

    /** 编辑属性操作 */
    EditProductProperties({ state }, data) {
      data = JSON.parse(JSON.stringify(data))
      state.propertiesAddEdit.handleUpdate(data)
    },

    /** 编辑功能操作 */
    EditProductFunctions({ state }, data) {
      data = JSON.parse(JSON.stringify(data))
      state.functionsAddEdit.handleUpdate(data)
    },

    /** 编辑事件操作 */
    EditProductEvents({ state }, data) {
      data = JSON.parse(JSON.stringify(data))
      state.eventsAddEdit.handleUpdate(data)
    },

    /** 编辑标签操作 */
    EditProductTags({ state }, data) {
      data = JSON.parse(JSON.stringify(data))
      state.tagsAddEdit.handleUpdate(data)
    },

    /** 删除物模型数据 */
    DeleteProductMetadata({ commit, state }, { type, id }) {

      // 删除属性
      let metadata = JSON.parse(state.productData.metadata)
      let byTypeMetadata = metadata[type]
      metadata[type] = byTypeMetadata.filter(item => id !== item.id)
      metadata = JSON.stringify(metadata)

      let updatedData = {
        metadata: metadata,
        publishState: 0
      }

      // 更新数据
      updateProduct({ ...state.productData, ...updatedData }).then(() => {
        // 更新缓存数据
        commit('PRODUCT_DATA', updatedData)
      })
    },

    /** 删除协议支持 */
    DeleteProductProtocolStandby({ commit, state }, id) {
      // 删除协议支持
      let protocolStandby = state.productData.protocolStandby
      if (!protocolStandby) {
        return
      }

      protocolStandby = JSON.parse(protocolStandby)

      let protocolStandbySingle = protocolStandby[id]

      if (protocolStandbySingle) {
        delete protocolStandby[id]
      }
      protocolStandby = JSON.stringify(protocolStandby)

      // 更新协议支持
      updateProtocolStandby(state.productData.id, protocolStandby).then(() => {
        // 更新缓存数据
        commit('PRODUCT_DATA', {
          protocolStandby: protocolStandby,
          publishState: 0
        })
      })

    },

    /** 查看协议支持 */
    ViewProductProtocolStandby({ state }, { id, thingType }) {
      let protocolStandby = state.productData.protocolStandby

      let jsonObject = {
        id: ''
      }

      if (protocolStandby) {
        protocolStandby = JSON.parse(protocolStandby)
        jsonObject = protocolStandby[id] || jsonObject
      }
      jsonObject.thingType = thingType
      state.protocolStandby.handleCheck(id, jsonObject)
    },
  }
}

export default product
